import { getUserInfoApi, loginApi, logoutApi } from '@/api/auth/auth'
import { getToken, setToken, removeToken } from '@/utils/accessUtil'
import { defineStore } from 'pinia'
import { ref } from 'vue'

// 你可以任意命名 `defineStore()` 的返回值，但最好使用 store 的名字，同时以 `use` 开头且以 `Store` 结尾。
// (比如 `useUserStore`，`useCartStore`，`useProductStore`)
// 第一个参数是你的应用中 Store 的唯一 ID。
export const useUserStore = defineStore('user', () => {
  // 登录用户信息
  const userInfo = ref<API.LoginUser>()
  const token = ref<string>(getToken() || '')

  // 登录
  const login = async (params: API.AuthParams) => {
    try {
      // 登录
      const res = await loginApi(params)
      token.value = res.data || ''
      setToken(token.value || '')
    } catch (error: any) {
      throw new Error(error.message)
    }
  }

  // 获取用户信息
  const getUserInfo = async () => {
    try {
      const res = await getUserInfoApi()
      userInfo.value = res.data
    } catch (error) {
      console.error(error)
    }
    return userInfo.value
  }

  // 登出
  const logout = async () => {
    
    try {
      // 调用登出API
      await logoutApi()
    } catch (error) {
      console.error('登出失败', error)
    } finally {
      // 无论API调用是否成功，都清除本地状态
      userInfo.value = undefined
      token.value = ''
      removeToken()
    }
  }

  return {
    userInfo,
    token,
    login,
    getUserInfo,
    logout
  }
})
